# -*- coding: UTF-8 -*-
# @Project ：big-data 
# @File    ：数据可视化.py
# @Author  ：于金龙
# @IDE     ：PyCharm 
# @Date    ：2024/4/24 8:50
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from collections import Counter

# 正常显示中文和正常显示负号
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

data = pd.read_excel('./附件.xlsx')

# 创建透视表
# colums设置为“职业主题”，将index设置为"岗位"
table = pd.pivot_table(data=data, columns='职位主题', index='岗位', values='公司编号', aggfunc='count',
                       fill_value=0)
max_job = {}
for index in table.columns[:]:
    max_job[index] = table.loc[:, index].idxmax()
# print(max_job)
# 输出结果
for theme, max_job in max_job.items():
    print(f'{theme}, {max_job}')

data[['最低工资', "最高工资"]] = data[['最低薪资', "最高薪资"]].astype("int")

# 定义一部字典来映射薪资的计算方式到相应的转换因子

conversion_factors = {
    '日': 30,  # 假设一个月的平均工作数为30天
    "月": 1,
    '年': 1 / 12  # 年薪平均到月薪
}

# 使用映射字典将薪资计算方式转化为月薪

data['最低薪资'] = data.apply(lambda row: row['最低薪资'] * conversion_factors[row['薪资计算方式']], axis=1)

data['最高薪资'] = data.apply(lambda row: row['最高薪资'] * conversion_factors[row['薪资计算方式']], axis=1)

# 删除原始的薪资计算方式列
data.drop(columns=['薪资计算方式'], inplace=True)
data['平均薪资'] = (data['最低薪资'] + data['最高薪资']) / 2
print(data['平均薪资'][:5])

# 不同学历的平均薪资的箱线图
plt.figure()
sns.boxplot(data=data, x='学历要求', y='平均薪资')
plt.xlabel('学历')
plt.ylabel('平均资源')
plt.title('不同学历的平均薪资分布')
plt.show()

job_count = data['岗位'].value_counts().sort_values(ascending=False)
print(job_count.index[:11])
plt.figure()
plt.bar(job_count.index[:11], job_count.values[:11])
plt.xlabel('岗位')
plt.xticks(rotation=90)
plt.ylabel('招聘需求量')
plt.title('需求量TOP10的岗位')
plt.show()

# 将技能要求列表合并为一个单独的列表
all_skills = [skill for req in data['职位关键词'] for skill in eval(req)]

# 统计关键词出现的次数
skill_counts = Counter(all_skills)
wordcloud = WordCloud(font_path=r'D:\gitee代码托管\big-data\数据分析-web\msyh.ttc', width=800, height=400, background_color='white',
                      max_font_size=150).generate_from_frequencies(skill_counts)

# 绘制词云图

plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
